package com.niit.springbootshop.entity;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

/**
 * 购物车类，存放购物车的列表以及总计金额
 * @author Admin
 *
 */
public class Cart {

	// 存放 购物车中商品的列表  每一行作为map的一个 "键值对"
    private Map<Integer,CartItem> cartMap = new HashMap<>();
    public Map<Integer, CartItem> getCartMap() {
		return cartMap;
	}
	private double total=0; // 总金额
    
	public double getTotal() {
		return total;
	}
	
	// 1. 返回购物车中所有的商品列表
	// Collection是 Set 和 List的父接口   在界面上可以直接 循环显示就ok
	public Collection<CartItem> getAll(){
		return cartMap.values(); // 从map中获取所有的 value
	}

	// 2. 添加商品
	// ① 如果商品在购物车的cartMap中不存在，则直接添加即可。
	// ② 如果商品已经存在，先取出来，数量进行修改,另外修改下 小计金额
	public void add(CartItem item) { // item存放着 需要新增的商品信息
		// cartMap.containsKey(key) // 可以判断某个key在不在map里面
		int pid = item.getProduct().getPid();
		if(cartMap.containsKey(pid)) { // 已经存在
			CartItem old = cartMap.get(pid); //获取原来的商品的信息
			old.setQuantity(old.getQuantity()+item.getQuantity()); // 修改数量
			cartMap.put(pid, old); // 放回去
		}else { // 第一次添加购物车，列表中不存在该商品的信息
			cartMap.put(pid, item);
		}
		// 总金额增加
		total = total+item.getSubTotal();
	}
	
	// 3. 根据商品的id从map中删除商品
	public void delete(int pid) {
		// 从总金额中  减掉   该商品的小计金额
		total = total - cartMap.get(pid).getSubTotal();
		cartMap.remove(pid); //删除 商品
	}
	// 4. 清空购物车
	public void clear() {
		cartMap.clear(); // 清空map中的所有的元素
		total=0;         // 总金额 清0
	}
}
